iT邦幫忙

2023 iThome 鐵人賽

DAY 4
1
SideProject30

世界第一簡單的UEFI,實作打造自己的開機畫面系列 第 4

【Day 4】好不容易寫完的程式不能在實體機器運行,解法是UEFI!

  • 分享至 

  • xImage
  •  

嗨我是k66,上一篇由豬油博士帶我們用x86 組合語言(.asm, assembly)實作出的最簡單bootloader,並透過NASM轉成Oinkbootloader.bin。理論上只需要將Oinkloader.bin放入USB driver中並將其設為MBR[註1]就能開機了。

我們先以QEMU[註2]模擬,指令qemu-system-x86_64 -fda bootloader.bin,會在QEMU視窗中出現前一篇寫得No Pig Killing字樣。
https://ithelp.ithome.com.tw/upload/images/20230910/20161828BzTdutiQ5s.png

讓Ointbootloader在虛擬機(QEMU)跑完後接著在實體機器上跑,需要主機板[註3]支援。目前近五年後市售的電腦幾乎不支援Legacy BIOS了[註4]。不幸地,目前我手邊的四台電腦皆沒有支援Legacy BIOS,因此無法在實體機使用Oinkbootloader。正是因為近代電腦幾乎不支援Legacy BIOS,因此小豬Oink想要嚇唬邪惡城主就得換方式寫boot loader。


小豬Oink:博士怎麼辦,我們寫好的第一支boot loader竟然不能在邪惡城主的電腦上使用…
豬油博士:Oink你別灰心,好不容易寫好的程式不能在實體機器上運行是常有的事。你還年輕,趁早習慣吧~
小豬Oink:…

豬油博士:年輕人打起精神!你想一下為什麼近代電腦不支援Legacy BIOS的理由。
小豬Oink:應該是人們覺得Legacy BIOS有什麼缺點吧!
豬油博士:答對了!不只是缺點,還是致命性大缺點!
小豬Oink:是什麼缺點要禁止呢?
豬油博士:Legacy BIOS有驅動程式最多1MB的限制與需放到真實模式[註5]的限制,
         故設計者想到UEFI BIOS取代Legacy BIOS,
         UEFI BIOS除了解決前兩項限制外,另還多了安全功能[註6]。
         我先講概念,接著就來教你實作UEFI版的boot loader吧!
小豬Oink:好耶!謝謝博士!

[註1] 將USB轉換為MBR格式,可透過Windows的Diskpart指令與Linux的dd指令。請特別注意換分區後USB driver會被當下的作業系統認不到,只有在進入Legacy BIOS才能被認得。
[註2] QEMU是一種跨指令集架構的虛擬機,在開發底層程式時常用來模擬。
[註3] 說是主機板支援,其實是主機板上一顆小小的IC,將BIOS程式燒錄在其上,需此IC內的BIOS程式支援Legacy BIOS。
[註4] 2015年後出廠的Macbook不支援Legacy BIOS,其他家不定。
[註5] 每個驅動程式要執行都要先切至真實模式,使效率低。
[註6] UEFI支援安全啟動。


上一篇
【Day 3】拯救豬腳城!寫最簡單的bootloader
下一篇
【Day 5】UEFI開機流程太難了!試試我們精簡後的三階boot loader!
系列文
世界第一簡單的UEFI,實作打造自己的開機畫面31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言